import axios from 'axios'
import {ElMessage} from "element-plus";
import {useStore} from "@/stores/store.js";
import router from "@/router/index.js";
axios.defaults.headers['Content-Type'] = 'application/json';
const service = axios.create({
    baseURL: 'http://192.168.4.26:20000', // api的base_url
    // baseURL: 'http://fun.free.idcfengye.com', // api的base_url
    timeout: 200000 // 请求超时时间
});
service.interceptors.request.use(config => {
    // 为请求头添加token字段为服务端返回的token
    config.headers['token'] = useStore().admin.token


    if (config.method === 'get' && config.params) {
        // 过滤掉 params 中的 null、undefined 或空字符串
        config.params = Object.fromEntries(
            Object.entries(config.params).filter(([_, value]) => value !== null && value !== undefined && value !== '')
        );
    }
    // return config是固定用法 必须有返回值
    return config
})

// service.defaults.baseURL = 'http://fun.free.idcfengye.com'
// service.defaults.timeout = 10000;
service.interceptors.response.use(
    (response) => response,
    (error) => {
        if (error.response && error.response.status === 401) {
            useStore().logout()
            router.push('/login')
        }
        return Promise.reject(error);
    }

);
service.interceptors.response.use(
    response => {
        /**
         * 对响应数据做点什么
         * 注意：这里response.data才是实际的数据
         */

        const res = response.data;

        // 检查是否有特定的错误处理逻辑
        if (res.flag !== true) {
            // 如果flag不是true，则认为是错误情况
            ElMessage.error(res.message || '未知错误');
            if (res.data === '404') {
                router.push('/notfound');
            }
            // 你可以根据需要决定是否返回Promise.reject(new Error('Error Message'))来中断后续的.then链
            // 但通常我们可能希望继续传递响应数据到下一个.then处理，即使它是错误的
            // return Promise.reject(new Error('Error Message'));
            return Promise.reject();
        }

        // 否则，正常返回响应数据
        return res;
    },
    error => {
        // 处理请求错误
        console.error('请求错误: ', error); // for debug
        ElMessage.error(error.message || '网络请求失败');
        // 可以选择抛出错误继续.catch()
        return Promise.reject(error);
    }
);
export default service
